/********************************** (C) COPYRIGHT *********************************
* File Name          : CH456.H
* Author             : tech
* Version            : V1.0
* Date               : 2013/07/06
* Description        : CH456硬件相关定义
**********************************************************************************/

// 硬件相关定义, 请根据实际硬件修改本文件
#ifndef	CH456IF_H
#define	CH456IF_H

#include "gpio.h"

#ifdef __cplusplus
extern "C"
{
#endif
#include "clock.h"

#define		DELAY		{ WaitUs(5);}	

typedef unsigned char   UINT8;
typedef unsigned short  UINT16;	

/* 2线接口的连接,与实际电路有关 */
// sbit	CH456_SCL = P1^0;
// sbit	CH456_SDA = P1^1;
/*sbit	CH456_INT = P3^3;*/
#define  CH456_POWER_PIN       GPIO_P31
#define  CH456_SDA_PIN         GPIO_P33
#define  CH456_SCL_PIN         GPIO_P32

/* 2线接口的位操作,与单片机有关 */
#define		CH456_SCL_SET		{HalGpioSet(CH456_SCL_PIN,Bit_ENABLE);}
#define		CH456_SCL_CLR		{HalGpioSet(CH456_SCL_PIN,Bit_DISABLE);}
#define		CH456_SCL_D_OUT		{HalGpioPinInit(CH456_SCL_PIN, GPIO_OUTPUT);}// 设置SCL为输出方向,对于双向I/O需切换为输出
#define		CH456_SDA_SET		{HalGpioSet(CH456_SDA_PIN,Bit_ENABLE);}
#define		CH456_SDA_CLR		{HalGpioSet(CH456_SDA_PIN,Bit_DISABLE);}
#define		CH456_SDA_IN		(HalGpioGet(CH456_SDA_PIN))
#define		CH456_SDA_D_OUT		{HalGpioPinInit(CH456_SDA_PIN, GPIO_OUTPUT);}				// 设置SDA为输出方向,对于双向I/O需切换为输出
#define		CH456_SDA_D_IN		{HalGpioPinInit(CH456_SDA_PIN, GPIO_INPUT);HalGpioPupdConfig(CH456_SDA_PIN,GPIO_PULL_UP_S);}	// 设置SDA为输入方向,对于双向I/O需切换为输入

#define CH456_BIT_DISP_EN	0x01		// 显示扫描使能
#define CH456_BIT_KEYB_EN	0x02		// 按键扫描使能
#define CH456_BIT_X_INT		0x08		// 中断使能
#define CH456_BIT_INTENS1	0x10		// 1级亮度
#define CH456_BIT_INTENS2	0x20		// 2级亮度
#define CH456_BIT_INTENS4	0x40		// 4级亮度
#define CH456_BIT_INTENS8	0x00		// 8级亮度
#define CH456_BIT_SLEEP		0x80		// 睡眠控制位

#define CH456_SYSTEM	0x4800			// 设置系统参数
#define CH456_CONFIG	0x7e00			// 设置配置参数,当CH456_BIT_X_INT为1时
#define CH456_SYS_ON	( CH456_SYSTEM | CH456_BIT_DISP_EN | CH456_BIT_KEYB_EN )	// 开启显示、键盘
#define CH456_ONLY_DISP	( CH456_SYSTEM | CH456_BIT_DISP_EN )	// 开启显示
#define CH456_SLP_OFF	( CH456_SYSTEM | CH456_BIT_SLEEP )	// 完全睡眠
#define CH456_SLP_KEY	( CH456_SYSTEM | CH456_BIT_KEYB_EN | CH456_BIT_SLEEP )	// 开启键盘后睡眠
#define CH456_XINT_ON	( CH456_SYSTEM | CH456_BIT_DISP_EN | CH456_BIT_KEYB_EN | CH456_BIT_X_INT )	// 开启中断模式

// 加载字数据命令
#define CH456_DIG0      0x6000              // 数码管位0显示
#define CH456_DIG1      0x6200              // 数码管位1显示 
#define CH456_DIG2      0x6400              // 数码管位2显示
#define CH456_DIG3      0x6600              // 数码管位3显示
#define CH456_DIG4      0x6800              // 数码管位4显示
#define CH456_DIG5      0x6a00              // 数码管位5显示 
#define CH456_DIG6      0x6c00              // 数码管位6显示 
#define CH456_DIG7      0x6e00              // 数码管位7显示
#define CH456_DIG8      0x7000              // 数码管位8显示
#define CH456_DIG9      0x7200              // 数码管位9显示 
#define CH456_DIG10     0x7400              // 数码管位10显示
#define CH456_DIG11     0x7600              // 数码管位11显示
#define CH456_DIG12     0x7800              // 数码管位12显示
#define CH456_DIG13     0x7a00              // 数码管位13显示    
#define CH456_DIG14     0x7c00              // 数码管位14显示    
#define CH456_DIG15     0x7e00              // 数码管位15显示 

// 读取按键代码命令
#define CH456_GET_KEY	0x4dff				// 获取按键,返回按键代码

// CH456接口定义
#define		CH456_I2C_ADDR		0x40			// CH456的地址
#define		CH456_I2C_MASK		0x3E			// CH456的高字节命令掩码

#define		CH456_DISP_BUFFLEN	0x10			// CH456 Display Buffer len

void CH456_Display(uint8 *dataBuff,uint8 len);
void CH456_IO_PowerDown(void);
void CH456_IO_Init(void);
void CH456_Init(void);
extern uint8 CH456_DISP_BUFF[CH456_DISP_BUFFLEN];

#ifdef __cplusplus
}
#endif

#endif
